# -*- coding: utf-8 -*-
#===============================================================================
# Koro Business Environment
# Copyright (C) 2008  Antonio Corroppoli
#
#This file is part of Koro BE.
# 
# Koro BE is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# Koro BE is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with Koro BE; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
#===============================================================================

'''
Created on 11/ago/2011

@author: antstud
'''

#from koro import util
from koro.core.model import IDObject
from koro.core import exception

#===============================================================================
# Anagrafica
#===============================================================================
class Anagrafica(IDObject):
    def __init__(self):
        IDObject.__init__(self)
        self.ragione_sociale=''
        self.indirizzo=None
        self.fk_indirizzo=None
        self.piva=''
        self.codfisc=''
        self.telefono=''
        self.fax=''
        self.cellulare=''
        self.referente=''
        self.email=''
        self.sitoweb=''
        self.note=''
    
    def get_piva(self):
        return self.piva
    
    def get_partita_iva(self):
        return self.piva

    def get_codice_fiscale(self):
        return self.codfisc

    def get_telefono(self):
        return self.telefono

    def get_fax(self):
        return self.fax

    def get_cellulare(self):
        return self.cellulare

    def get_email(self):
        return self.email

    def get_sitoweb(self):
        return self.sitoweb

    def get_ragione_sociale(self):
        return self.ragione_sociale

    def get_indirizzo(self):
        if self.indirizzo is None:
            return Indirizzo()
        return self.indirizzo

    def get_via(self):
        if self.indirizzo is None:
            return ''
        return self.indirizzo.via
    
    def get_cap(self):
        if self.indirizzo is None:
            return ''
        return self.indirizzo.cap
    
    def get_citta(self):
        if self.indirizzo is None:
            return ''
        return self.indirizzo.localita
    
    def get_provincia(self):
        if self.indirizzo is None:
            return ''
        return self.indirizzo.provincia

    def set_ragione_sociale(self, value):
        self.ragione_sociale = value

    def set_indirizzo(self, value):
        '''Riceve un oggetto Indirizzo.'''
        #assert isinstance(value,Indirizzo)
        if value.is_empty():
            value=None
            self.fk_indirizzo=None
        self.indirizzo = value
    
    def set_via(self,value):
        if self.indirizzo is None:
            self.indirizzo=Indirizzo()
        self.indirizzo.via=value
    
    def set_cap(self,value):
        if self.indirizzo is None:
            self.indirizzo=Indirizzo()
        self.indirizzo.cap=value
    
    def set_citta(self,value):
        if self.indirizzo is None:
            self.indirizzo=Indirizzo()
        self.indirizzo.localita=value
    
    def set_provincia(self,value):
        if self.indirizzo is None:
            self.indirizzo=Indirizzo()
        self.indirizzo.provincia=value
            
    def set_partita_iva(self, value):#TODO:fare il controllo piva
        self.piva = value

    def set_codice_fiscale(self, value):#TOTO:controllo codice fiscale
        self.codfisc = value

    def set_telefono(self, value):
        self.telefono = value

    def set_fax(self, value):
        self.fax = value

    def set_cellulare(self, value):
        self.cellulare = value

    def set_email(self, value):
        self.email = value

    def set_sitoweb(self, value):
        self.sitoweb = value

    via=property(get_via,None,None,None)
    cap=property(get_cap,None,None,None)
    citta=property(get_citta,None,None,None)
    provincia=property(get_provincia,None,None,None)





#===============================================================================
# ClienteFornitore
#===============================================================================
class ClienteFornitore(Anagrafica,Commerciale):
    CLIENTE='C'
    FORNITORE='F'
    def __init__(self):
        Anagrafica.__init__(self)
        Commerciale.__init__(self)        
        self.desueto=False
        self.tipo=''
    
    def validate(self):
        if not self.ragione_sociale.lstrip():
            raise exception.KoroInvalidObject("Il campo 'Ragione Sociale' è richiesto")
        if not bool(self.fk_listino):
            raise exception.KoroInvalidObject("Il campo 'Listino' è richiesto")
        if (self.piva is not None and 
            bool(self.piva.strip()) and
            len(self.piva)!=11):
            raise exception.KoroInvalidObject("La partita IVA non è corretta.")
        if (self.codfisc is not None and 
            bool(self.codfisc.strip()) and
            len(self.codfisc)!=16):
            raise exception.KoroInvalidObject("Il codice fiscale non è corretto.")            
    
    def is_desueto(self):
        return bool(self.desueto)
    
    def is_cliente(self):
        return self.tipo==ClienteFornitore.CLIENTE
    
    def is_fornitore(self):
        return self.tipo==ClienteFornitore.FORNITORE

    def set_desueto(self, value):
        self.desueto = bool(value)


#===============================================================================
# Azienda
#===============================================================================
class Azienda(Anagrafica):
    def __init__(self):
        super(Azienda,self).__init__()
    
    def validate(self):
        return


#===============================================================================
# Indirizzo
#===============================================================================
class Indirizzo(object):
    def __init__(self):
        self.via=''
        self.cap=''
        self.localita=''
        self.provincia=''

    def get_via(self):
        return self.via

    def get_cap(self):
        return self.cap

    def get_localita(self):
        return self.localita

    def get_provincia(self):
        return self.provincia

    def set_via(self, value):
        self.via = value

    def set_cap(self, value):
        self.cap = value

    def set_localita(self, value):
        self.localita = value

    def set_provincia(self, value):
        self.provincia = value
    
    def is_empty(self):
        return self.via=='' and \
               self.cap=='' and \
               self.localita=='' and \
               self.provincia==''
    

